package com.mkx.timerwheel;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

/**
 * 时间轮任务接口，继承自Delayed接口
 */
public interface TimerTask extends Delayed, Runnable {
    
    /**
     * 设置任务的执行时间
     * @param executionTime 执行时间戳（毫秒）
     */
    void setExecutionTime(long executionTime);
    
    /**
     * 获取任务的创建时间
     * @return 创建时间戳（毫秒）
     */
    long getCreateTime();
    
    @Override
    default long getDelay(TimeUnit unit) {
        long delay = getExecutionTime() - System.currentTimeMillis();
        return unit.convert(delay, TimeUnit.MILLISECONDS);
    }
    
    @Override
    default int compareTo(Delayed o) {
        if (o instanceof TimerTask) {
            return Long.compare(this.getExecutionTime(), ((TimerTask) o).getExecutionTime());
        }
        return Long.compare(this.getDelay(TimeUnit.MILLISECONDS), o.getDelay(TimeUnit.MILLISECONDS));
    }
    
    /**
     * 获取任务的执行时间
     * @return 执行时间戳（毫秒）
     */
    long getExecutionTime();
}